# -*- coding: utf-8 -*-

from sqlobject import *


class Usuario(SQLObject):
    class sqlmeta:
        table = "usuario_permissao"
    login = StringCol(length=50, default=None)
    senha = StringCol(length=8, default=None)
    permissoes = RelatedJoin("Permissao")
    perfil = ForeignKey("Perfil", default=None)
    
    @classmethod
    def novo(self, trans):
        perfil = Perfil.get(id=2,connection=trans)
        usuario = Usuario(login='',
                          senha='',
                          perfil = perfil,
                          connection=trans)
        permissoes = perfil.permissoes
        for permissao in permissoes:
            usuario.addPermissao(permissao)
        return usuario
    
    def update_permissoes(self,permissoes_id):
        
        permissoesAntigas = self.permissoes
        for permissaoAntiga in permissoesAntigas:
            if permissaoAntiga.id not in permissoes_id:
                self.removePermissao(permissaoAntiga)
        permissoesAntigas = self.permissoes
        ids_antigos = [permissaoAntiga.id for permissaoAntiga in permissoesAntigas]
        for id in permissoes_id:
            if id not in ids_antigos:
                self.addPermissao(id)
                
    def validar(self, trans, isNew):
        
        if not self.login:
            return ('login','Login é Obrigatório')
        elif isNew:
            usuario = Usuario.selectBy(login=self.login, connection=trans)
            if usuario.count() > 1:
                return ('login','Login já existente. Favor escolher outro')
        if not self.senha:
            return ('senha','Senha é Obrigatório')
            
         
        

class Permissao(SQLObject):
    descricao = StringCol(length=20, default=None)
    usuarios = RelatedJoin("Usuario")
    perfis = RelatedJoin("Perfil")


class Perfil(SQLObject):
    class sqlmeta:
        table = "perfil_permissao"
    descricao = StringCol(length=20, default=None)
    permissoes = RelatedJoin("Permissao")
    usuarios = MultipleJoin("Usuario")    
